# flask 操作数据库
# 导包  pymysql
import pymysql
#md5加密
import hashlib  # md5python的类库用来加密使用  内置  不需要安装

# 数据密码加密方法
def make_password(password):

    # 实例化md5对象
    md5 = hashlib.md5()

    # 转码 md5底层  把明文密码传过来转为utf8
    sign_utf8 = str(password).encode(encoding='utf-8')

    # 进行加密操作
    md5.update(sign_utf8)

    #返回密文
    return md5.hexdigest()

# 做数据库常量 用的
DB_HOST = 'localhost'  #端口
DB_USER = 'root'    # 数据库用户名
DB_PASSWORD = '123' # 数据库密码
DB_NAME = 'myflask' # 数据库名


#导入配置数据库的settings
# from settings import DB_NAME,DB_HOST,DB_USER,DB_PASSWORD

class Db:
    # 初始化方法
    def __init__(self):
        # 链接数据库
        self.conn = pymysql.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASSWORD,    # cousorclass   声明这个用字典取代元组
                                    db=DB_NAME, charset='utf8',cursorclass=pymysql.cursors.DictCursor)
        self.cursor = self.conn.cursor()

    # 插入方法
    def delete(self, sql):
        # 创建游标对象
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交sql
        self.conn.commit()
        return 'delete ok'

    # 插入方法
    def insert(self, sql):
        # 创建游标对象
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交sql
        self.conn.commit()
        return 'insert ok'

    #修改操作
    def update(self,sql):
        # 创建游标对象
        # self.cursor = self.conn.cursor()
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交sql
        self.conn.commit()
        return 'update ok'
    # 查询方法 查询单个数据
    def get_one(self,sql):
        # 创建游标对象
        # self.cursor = self.conn.cursor()
        # 执行sql
        self.cursor.execute(sql)
        # 获取数据
        res = self.cursor.fetchone()
        # 返回结果
        return res
    # 查询方法 查询多个数据
    def get_all(self, sql):
        # 创建游标对象
        # self.cursor = self.conn.cursor()
        #执行sql语句
        self.cursor.execute(sql)
        #获取数据
        res = self.cursor.fetchall()
        return res

    # 析构方法
    def __del__(self):
        # 关闭游标
        self.cursor.close
        # 关闭数据库连接
        self.conn.close


# 实例化对象
databases = Db()
# 调用方法  写`为了和sql关键字区分开
# res = db.insert(" insert into `user` (`username`,`password`,`phton`) value('admin123','%s','18595604641') " % make_password('123'))
# res = db.update("update `user` set `username`= '123ad' where `id`=7")
# 打印返回值
# res = db.get_one("select * from `user` ")
# res = db.get_all("select * from `user` ")
# print(res)

# 写封装常见三问题      3.6之后版本自动继承object    缩进问题   忘记写self
